/**
 * AI解梦服务
 * 集成AI解梦功能，专注于积极心理暗示和正能量内容生成
 */

const { logInfo, logError, logDebug, logWarning } = require('../logger');

/**
 * 提取梦境描述中的关键词
 * @param {string} dreamDescription - 梦境描述
 * @returns {Array} 关键词数组
 */
function extractKeywords(dreamDescription) {
  // 基础关键词库
  const baseKeywords = [
    '坠落', '迷路', '迟到', '牙齿', '考试', '水', '飞行', '蛇', '死亡', '追逐',
    '被困', '丢失', '黑暗', '下雨', '考试失败', '找不到厕所', '结婚', '怀孕',
    '火灾', '洪水', '地震', '车祸', '杀人', '被杀', '鬼魂', '怪物', '天使',
    '动物', '房子', '钱', '工作', '学校', '朋友', '家人', '陌生人', '镜子',
    '门', '窗户', '楼梯', '电梯', '桥', '山', '海', '天空', '星星', '太阳',
    '月亮', '云', '风', '雨', '雪', '雷电', '彩虹', '花朵', '树木', '果实'
  ];

  // 提取关键词
  const foundKeywords = [];
  for (const keyword of baseKeywords) {
    if (dreamDescription.includes(keyword)) {
      foundKeywords.push(keyword);
    }
  }

  // 如果没有找到基础关键词，则尝试提取一些有意义的词汇
  if (foundKeywords.length === 0) {
    // 简单的分词逻辑（可以根据需要扩展）
    const words = dreamDescription.replace(/[^\u4e00-\u9fa5a-zA-Z0-9]/g, ' ').split(/\s+/);
    for (const word of words) {
      if (word.length >= 2) {  // 只考虑长度大于等于2的词
        foundKeywords.push(word);
      }
    }
  }

  return foundKeywords;
}

// 积极解读词库
const positiveInterpretations = {
  '坠落': '这是在释放压力，为新的起飞做准备！',
  '迷路': '人生处处是风景，意外的发现最美丽',
  '迟到': '你的时间观念很强，连梦里都在提醒珍惜时光',
  '牙齿掉落': '旧的即将过去，新的美好正在萌芽',
  '考试': '你的学习能力超棒，大脑在自动复习呢',
  '水': '梦见水通常代表情感和潜意识。这个梦可能反映了你内心的情感波动或对某件事情的深层感受，这是自我成长的信号。',
  '飞行': '梦见飞行通常象征着自由和解脱。你可能正在寻求摆脱某种束缚，或者渴望更多的自由和独立，这是内心力量的体现。',
  '蛇': '梦见蛇通常代表转变和重生。这个梦可能预示着你生活中即将发生重要的积极变化。',
  '死亡': '梦见死亡通常不代表真正的死亡，而是象征着结束和新的开始。你可能正在经历某种积极的转变。',
  '追逐': '这说明你的目标很明确，连潜意识都在推动你前进！',
  '被困': '暂时的困难是为了让你更珍惜自由的可贵',
  '丢失': '放下一些东西，是为了腾出空间迎接更好的',
  '黑暗': '黑暗之后必有光明，你的坚持终将被看见',
  '下雨': '雨水淨白尘埃，也滋润着希望的种子',
  '考试失败': '这提醒你要更自信，你的能力远超想象',
  '迟到': '你的时间管理意识很强，这是好事',
  '找不到厕所': '这只是身体的自然反应，不必担心'
};

// 每日鼓励系统
const dailyEncouragements = [
  '从今天起，你就是自己的幸运星⭐',
  '你的潜力像宇宙一样无限大🌌',
  '每个挑战都是成长的机会，你超棒的！',
  '今天的你比昨天更强大✨',
  '相信自己，你拥有改变一切的力量💪',
  '你的努力正在悄悄开花结果🌸',
  '保持微笑，好运正在路上😊',
  '你是独一无二的，世界因你而精彩🌟'
];

// 积极行动建议库
const actionSuggestions = [
  '今天对三个人微笑，收获三倍快乐',
  '记录三件感恩的事，让幸福看得见',
  '尝试一件小事，发现全新的自己',
  '给自己点个赞，你值得所有美好',
  '帮助他人，传递温暖和善意',
  '深呼吸三次，感受内心的平静',
  '拥抱自然，让心灵得到滋养',
  '写下今天的三个小确幸'
];

// 可爱比喻系统
const cuteMetaphors = {
  '困难': '就像游戏里的关卡，通关后经验值暴涨！',
  '变化': '生活给你的惊喜包裹，拆开看看是什么礼物',
  '等待': '美好的事物值得期待，就像烤箱里的蛋糕',
  '挑战': '这是生活给你的升级礼包，接受它！',
  '压力': '就像手机充电时的发热，是为了更好的续航',
  '忙碌': '你就像蜜蜂一样勤劳，一定会酿出甜蜜',
  '孤独': '这是为了让你更珍惜与他人的连接',
  '失败': '这是成功路上的垫脚石，让你站得更高'
};

// 幸运预测机
const luckyPredictions = [
  '今天会有意外的小惊喜🎁',
  '你的努力即将被看见和认可',
  '会有新的机会向你招手',
  '心情会像阳光一样明媚',
  '人际关系会有积极进展',
  '创造力将达到新的高度',
  '健康状态会有所改善',
  '财务方面会有好消息'
];

/**
 * 生成积极解读
 * @param {Array} keywords - 关键词数组
 * @returns {string} 积极解读
 */
function generatePositiveInterpretation(keywords) {
  if (!keywords || keywords.length === 0) {
    return '这个梦境反映了你丰富的内心世界，每一个梦境都是心灵成长的印记。';
  }
  
  // 查找关键词对应的积极解读
  for (const keyword of keywords) {
    if (positiveInterpretations[keyword]) {
      return positiveInterpretations[keyword];
    }
  }
  
  // 如果没有找到匹配的解读，返回默认积极解读
  return '这个梦境反映了你丰富的内心世界，每一个梦境都是心灵成长的印记。';
}

/**
 * 生成可爱比喻
 * @param {Array} keywords - 关键词数组
 * @returns {string} 可爱比喻
 */
function generateMetaphor(keywords) {
  if (!keywords || keywords.length === 0) {
    return '生活就像一本精彩的书，每一页都充满惊喜';
  }
  
  // 查找关键词对应的比喻
  for (const keyword of keywords) {
    if (cuteMetaphors[keyword]) {
      return cuteMetaphors[keyword];
    }
  }
  
  // 返回随机比喻
  const metaphors = Object.values(cuteMetaphors);
  return metaphors[Math.floor(Math.random() * metaphors.length)] || '生活就像一本精彩的书，每一页都充满惊喜';
}

/**
 * 生成每日鼓励
 * @returns {string} 每日鼓励
 */
function generateEncouragement() {
  return dailyEncouragements[Math.floor(Math.random() * dailyEncouragements.length)];
}

/**
 * 生成行动建议
 * @param {Array} keywords - 关键词数组
 * @returns {string} 行动建议
 */
function generateActionAdvice(keywords) {
  return actionSuggestions[Math.floor(Math.random() * actionSuggestions.length)];
}

/**
 * 生成幸运预测
 * @returns {string} 幸运预测
 */
function generatePrediction() {
  return luckyPredictions[Math.floor(Math.random() * luckyPredictions.length)];
}

/**
 * 生成心情指数
 * @returns {number} 心情指数 (1-10)
 */
function generateMoodIndex() {
  return Math.floor(Math.random() * 10) + 1;
}

/**
 * 生成能量指数
 * @returns {number} 能量指数 (1-10)
 */
function generateEnergyIndex() {
  return Math.floor(Math.random() * 10) + 1;
}

/**
 * 生成自信指数
 * @returns {number} 自信指数 (1-10)
 */
function generateConfidenceIndex() {
  return Math.floor(Math.random() * 10) + 1;
}

/**
 * 生成幸运数字
 * @returns {number} 幸运数字 (1-99)
 */
function generateLuckyNumber() {
  return Math.floor(Math.random() * 99) + 1;
}

/**
 * 生成幸运颜色
 * @returns {string} 幸运颜色
 */
function generateLuckyColor() {
  const colors = ['红色', '橙色', '黄色', '绿色', '蓝色', '紫色', '粉色', '金色', '银色'];
  return colors[Math.floor(Math.random() * colors.length)];
}

/**
 * 生成幸运方向
 * @returns {string} 幸运方向
 */
function generateLuckyDirection() {
  const directions = ['东方', '南方', '西方', '北方', '东南方', '东北方', '西南方', '西北方'];
  return directions[Math.floor(Math.random() * directions.length)];
}

/**
 * AI解梦服务 - 提供积极心理暗示和正能量内容生成
 * @param {string} dreamDescription - 用户输入的梦境描述
 * @returns {Object} 解梦结果，包含积极心理暗示和正能量内容
 */
async function interpretDream(dreamDescription) {
  try {
    // 记录开始处理日志
    logInfo('开始处理AI解梦请求', { dreamLength: dreamDescription.length });
    
    // 输入验证
    if (!dreamDescription || dreamDescription.trim().length === 0) {
      logWarning('梦境描述为空或无效');
      throw new Error('请输入有效的梦境描述');
    }

    // 记录输入详情（仅记录长度和关键词，不记录具体内容以保护隐私）
    logDebug('梦境描述分析', { 
      dreamLength: dreamDescription.length,
      keywordCount: extractKeywords(dreamDescription).length
    });

    // 关键词匹配逻辑
    const keywords = extractKeywords(dreamDescription);
    logDebug('关键词提取完成', { keywordCount: keywords.length });
    
    const positiveInterpretation = generatePositiveInterpretation(keywords);
    logDebug('积极解读生成完成');
    
    // 生成积极心理暗示内容
    const result = {
      interpretation: positiveInterpretation,
      metaphor: generateMetaphor(keywords),
      encouragement: generateEncouragement(),
      action: generateActionAdvice(keywords),
      prediction: generatePrediction(),
      mood: generateMoodIndex(),
      energy: generateEnergyIndex(),
      confidence: generateConfidenceIndex(),
      luckyNumber: generateLuckyNumber(),
      luckyColor: generateLuckyColor(),
      luckyDirection: generateLuckyDirection()
    };

    // 记录生成的各个部分
    logDebug('解梦各部分生成完成', { 
      hasInterpretation: !!result.interpretation,
      hasMetaphor: !!result.metaphor,
      hasEncouragement: !!result.encouragement,
      hasAction: !!result.action
    });

    // 记录完成日志
    logInfo('AI解梦完成 - 积极心理暗示版本', { 
      dreamLength: dreamDescription.length,
      resultKeys: Object.keys(result)
    });
    
    return result;
  } catch (error) {
    logError('AI解梦服务出错', { 
      error: error.message,
      stack: error.stack,
      dreamLength: dreamDescription?.length || 0
    });
    throw error;
  }
}

module.exports = {
  interpretDream
};